package com.example.demo.netty.chat_room.util;

import com.example.demo.netty.chat_room.domain.MessageProtocol;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;

import java.util.List;

public class MessageDecoder extends ByteToMessageDecoder{
    // 这条数据的长度
    private int len =0;
    @Override
    protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> list) throws Exception {
        if(byteBuf.readableBytes()>=4){
            // 如果现在没有待读的数据则读取头部长度标识
            if(len==0){
                // 读取前4个字节
                len=byteBuf.readInt();
            }
            // 如果数据不全
            if(byteBuf.readableBytes()<len){
                System.out.println("数据不够,等待下个包");
                return; // 等待下次数据来之后调用这个decode方法再检测数据包加起来的大小
            }
            byte[] data =new byte[len];
            byteBuf.readBytes(data);
            // 将数据包封装成对象传给事件处理器
            list.add(new MessageProtocol(data.length,data));
            // 重置数据长度
            len=0;
        }

    }
}
